vi compiler så den virtuelle mouse (cd vms)
Dette gøres med medfølgende make file
Herefter indsættes den virtuelle mouse med den sedvanlige kommando: sudo insmod vms.ko
Vi ser at cursoren bevæger sig skråt ned af fra højre.
B)
Target
Vi kompiler som vil altid har gjort kernemodulet til target med kommando "make target".
herefter kopiers filen vms.ko til target med scp vms.ko root@10.9.8.2:
insdættes på target med insmod vms.ko
Vi kan se at vilke input devices der eksistere ved at skrive "ls -l/dev/input
Inden vms.ko indsættes
C) Lav din egen input driver som benytter GPIO interrupts.
Til dette har vi benytte grundmodeller fra tidligere øvelser til at få oprettet vore GPIO.
Vi har så derefter opsat de forskellige GPIO'er til at requeste og derefter bad vi dem blive opsat til indgange og udgange
Efter at alle GPIO'er var opsatte kunne vi så opsætte vores interrupts ved at requeste irq.
Vi benytter &gpio[1].num til at checke vilket interrupt der bliver benyttet/påvirket.
Opsætningen af keyboard gøres som des ses i 3 søjler. Ved at gøre dette har devkittet mulighed for at registre input fra matrix keyboardet.
Om man ønsker at kunne benytte sig af det fulde matrix keyboard er man nød til på skift at sætte være søjle til 0 og så scanne rækkerne.
irqreturn_t my_interrupt( int irq, void * dev_id)
{
int* id = (int*)dev_id;
switch (*id)
{
case 131:
input_report_rel(vms_input_dev, REL_X, -10);
input_sync(vms_input_dev);
break;
case 133:
input_report_rel(vms_input_dev, REL_X, 10);
input_sync(vms_input_dev);
break;
case 135:
input_report_rel(vms_input_dev, REL_Y, -10);
input_sync(vms_input_dev);
break;
case 136:
input_report_rel(vms_input_dev, REL_Y, 10);
input_sync(vms_input_dev);
break;
}
return IRQ_HANDLED;
}
I vores dev_id ligger de input elelr GPIO numre som gør at vi kan switche imellem de forskellige opsatte cases og på den måde skrive forskelligt til den virtuelle mouse og få den til at bevæge sig da vi så kalder input_sync.
vi checker vilke input devices som hvores pc har, dette gøre i mappen /input
vi compiler så den virtuelle mouse (cd vms)
Dette gøres med medfølgende make file
Herefter indsættes den virtuelle mouse med den sedvanlige kommando: sudo insmod vms.ko
Vi kan nu se at der e rblevet tilføjet et ekstra mouse input i form af event 5 og mouse 3
Vi har nu mulighed for at skrive til den virtuelle mouse med kommandoen echo x y z > coordinates
Vi ser at cursoren bevæger sig skråt ned af fra højre.
B)
Target
Vi kompiler som vil altid har gjort kernemodulet til target med kommando "make target".
herefter kopiers filen vms.ko til target med scp vms.ko root@10.9.8.2:
insdættes på target med insmod vms.ko
Vi kan se at vilke input devices der eksistere ved at skrive "ls -l/dev/input
Inden vms.ko indsættes
Efter indsættelse af vms.ko
Vi ser at event4 og mouse1 er blevet tilføjet.
Check efter copy af QT
Vi ser at vi nu benytter touchscreen0
Vi tilføjer en virtual mus med variabler XYZ
Vi køre qt_test2
vi skriver kordinater til musen
C) Lav din egen input driver som benytter GPIO interrupts.
Til dette har vi benytte grundmodeller fra tidligere øvelser til at få oprettet vore GPIO.
Vi har så derefter opsat de forskellige GPIO'er til at requeste og derefter bad vi dem blive opsat til indgange og udgange
unsigned int irq_nr_1,irq_nr_3,irq_nr_5,irq_nr_6; irq_nr_1=(gpio_to_irq(gpio[1].num)); //geting irq nummer irq_nr_3=(gpio_to_irq(gpio[3].num)); irq_nr_5=(gpio_to_irq(gpio[5].num)); irq_nr_6=(gpio_to_irq(gpio[6].num)); printk(KERN_ALERT "irq nummeret er: %i\n",irq_nr_1); printk(KERN_ALERT "irq nummeret er: %i\n",irq_nr_3); printk(KERN_ALERT "irq nummeret er: %i\n",irq_nr_5); printk(KERN_ALERT "irq nummeret er: %i\n",irq_nr_6); if(request_irq(irq_nr_1,my_interrupt,IRQF_TRIGGER_FALLING,"GPIO_131_int",&gpio[1].num)) //requesting/init interrupt { printk(KERN_ALERT "could not request irq_1 \n"); } if(request_irq(irq_nr_3,my_interrupt,IRQF_TRIGGER_FALLING,"GPIO_133_int",&gpio[3].num)) //requesting/init interrupt { printk(KERN_ALERT "could not request irq_3 \n"); } if(request_irq(irq_nr_5,my_interrupt,IRQF_TRIGGER_FALLING,"GPIO_135_int",&gpio[5].num)) //requesting/init interrupt { printk(KERN_ALERT "could not request irq_5 \n"); } if(request_irq(irq_nr_6,my_interrupt,IRQF_TRIGGER_FALLING,"GPIO_136_int",&gpio[6].num)) //requesting/init interrupt { printk(KERN_ALERT "could not request irq_6 \n"); }Efter at alle GPIO'er var opsatte kunne vi så opsætte vores interrupts ved at requeste irq.Vi benytter &gpio[1].num til at checke vilket interrupt der bliver benyttet/påvirket.
Opsætningen af keyboard gøres som des ses i 3 søjler. Ved at gøre dette har devkittet mulighed for at registre input fra matrix keyboardet.
Om man ønsker at kunne benytte sig af det fulde matrix keyboard er man nød til på skift at sætte være søjle til 0 og så scanne rækkerne.
Interrupt implementeres
irqreturn_t my_interrupt( int irq, void * dev_id) { int* id = (int*)dev_id; switch (*id) { case 131: input_report_rel(vms_input_dev, REL_X, -10); input_sync(vms_input_dev); break; case 133: input_report_rel(vms_input_dev, REL_X, 10); input_sync(vms_input_dev); break; case 135: input_report_rel(vms_input_dev, REL_Y, -10); input_sync(vms_input_dev); break; case 136: input_report_rel(vms_input_dev, REL_Y, 10); input_sync(vms_input_dev); break; } return IRQ_HANDLED; }I vores dev_id ligger de input elelr GPIO numre som gør at vi kan switche imellem de forskellige opsatte cases og på den måde skrive forskelligt til den virtuelle mouse og få den til at bevæge sig da vi så kalder input_sync.